import axios from 'axios';

/**
 * @method 仓库引入
 */
console.log(config.getServerUrl());
import store from '@/stores/store';
import config from '@/config/config';
const service = axios.create({
  baseURL: config.getServerUrl(),
  timeout: 5000,
  responseType: 'json',
  // 是否允许带 cookie, 当该项值设置为 true 时
  // 跨域场景中服务端必须指定明确指定 Access-Control-Allow-Origin
  // 不可以设置 Access-Control-Allow-Origin 的值为 *
  withCredentials: false,
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
});

// 请求拦截器
service.interceptors.request.use(
  (request) => {
    /**
     * @method 仓库中token使用
     */
    // 发送请求之前
    request.headers.set('Authorization', `Bearer ${store.LoginData().tokenGet()}`, true);
    return request;
  },
  (error) => {
    // 发送请求错误: 非服务端返回的错误
    return Promise.reject(error.response);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    console.log(response.data,`response.dataresponse.dataresponse.data`);
    if (response.data.code === 401) {
      localStorage.setItem("_login_token_", "");
      location.reload(); // 清空路由
    }
    // 服务端响应 2xx
    return Promise.resolve(response.data);
  },
  (error) => {
    // 服务端响应超出 2xx 的范围
    const httpStatus = error.response.status;
    console.log(httpStatus,`httpStatushttpStatushttpStatus`);
    
    if (httpStatus) {
      switch (httpStatus) {
        case 401:

          console.log('缺失访问令牌');
          break;
        case 403:
          console.log('令牌错误,包含过期');
          break;
        case 404:
          console.log('服务端接口不存在');
          break;
        default:
          // 5xx 的服务器错误直接返回
          if (httpStatus >= 500) {
            return Promise.reject(error.response);
          }
      }
      // 这里统一弹出消息提示,这里非 5xx 错误
      return Promise.reject(error.response.data);
    }
  }
);

export default service;
